import { getToken, removeToken } from '@/utils'
import router from '@/router'
// axios 封装
import axios from 'axios'
// 1. 根域名配置
// 2. 超时时间
// 3. 请求拦截器/ 响应拦截器

const http = axios.create({
	baseURL: 'http://geek.itheima.net/v1_0',
	timeout: 5000
})

// 请求拦截器
// 在发送请求之前做一些处理，比如设置 headers、token 等
http.interceptors.request.use((config) => {
	// 操作 config 发送请求之前的操作
	// 如设置 headers
	const token = getToken()
	if (token) {
		config.headers.Authorization = `Bearer ${token}`
	}
	return config
}, (error) => {
	return Promise.reject(error)
})

// 响应拦截器
// 在接收到响应数据之后做一些处理，比如根据状态码做一些操作，比如 token 失效，重新登录等
http.interceptors.response.use((response) => {
	// 操作 response 接收到响应数据之后的操作

	return response.data
}, (error) => {
	// 操作 error 接收到错误信息之后的操作
	console.dir(error)
	if (error.response.status === 401) {
		// token 失效，重新登录
		removeToken()
		router.navigate('/login')
		window.location.reload()
	}
	return Promise.reject(error)
})

export { http }